#ifndef XMLGATEWAY_H
#define XMLGATEWAY_H

#include <iostream>
#include <string>
#include <tinyxml2.h>

using namespace tinyxml2;
using namespace std;

class XmlGateway
{
public:
    XmlGateway(const string& path);
    ~XmlGateway();

    bool initXmlFile();
    bool loadXML();

    void printXML() const;

    // 查找指定的 gateway 节点
    XMLElement* findGateway(const string& gatewayUid) const;

    // 添加一个新的 channel_detail 节点
    bool addChannel(const string& gatewayUid,
                    const string& channelCode, const string& channelType,
                    const string& netMode, const string& ip, const string& port,
                    const string& reply, const string& channelName, const string& status);

    // 添加一个新的 channel_detail 节点
    bool addChannel(XMLElement* gateway, const string& channelCode, const string& channelType,
                    const string& netMode, const string& ip, const string& port,
                    const string& reply, const string& channelName, const string& status);

    // 删除指定的 channel_detail 节点
    void deleteChannel(XMLElement* gateway, const string& channelCode);

    // 更新指定的 channel_detail 节点的状态
    void updateChannel(XMLElement* gateway, const string& channelCode, const string& newStatus);

    // 保存 XML 文件
    void saveXML(const string& newFilePath = "");

private:
    tinyxml2::XMLDocument* m_doc; // XML 文档对象
    string m_filePath; // XML 文件路径
};

#endif // XMLGATEWAY_H
